<?php

// trait冲突问题的解决

trait Site2 {
    public function getSiteName() {

    }

    // 抽象方法
    abstract public function name();

    // 静态方法
    public static function show() {
        return __METHOD__;
    }
}
trait Log2
{
    public function save()
    {
        return __METHOD__;
    }
}

trait Comment2
{
    use Site2;
    public function save()
    {
        return __METHOD__;
    }
}

class Topic2
{
    public function __construct()
    {
        echo '构造方法执行了';
    }

    use Log2, Comment2 {
        Log2::save insteadof Comment2; // 用log里的save方法
        Comment2::save as protected send; // 将comment里的方法名改为send方法
    }

    public function name()
    {
        return 'comment name';
    }

    public function __destruct() // 析构函数
    {
        echo '析构方法destruct执行了';
    }
}
$topic = new Topic2();
echo $topic->save();
echo $topic->name();
echo Topic2::show();
// echo $topic->send(); // ERROR protected外部不能访问